//
//  DMBannerStrategyParser.h
//  DualMediationSDK
//
//  Created by DualMediation on 2024/01/01.
//  Copyright © 2024 DualMediation. All rights reserved.
//

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

/**
 * Banner广告策略解析器
 * 负责解析后端Banner广告策略数据，提供场景化Banner配置
 */
@interface DMBannerStrategyParser : NSObject

/**
 * 单例实例
 */
+ (instancetype)sharedParser;

/**
 * 解析Banner广告策略数据
 * @param strategyData 后端返回的策略数据
 * @return 解析是否成功
 */
- (BOOL)parseBannerStrategy:(NSDictionary *)strategyData;

/**
 * 获取指定场景的Banner配置
 * @param sceneName 场景名称（如：SCENE_BANNER_INIT、SCENE_BANNER_LEVEL_ENTER）
 * @return Banner配置字典，包含ad_wait_time、ad_impression_pos、ad_banner_short_show、ad_daily_limit等参数
 */
- (nullable NSDictionary *)getBannerConfigForScene:(NSString *)sceneName;

/**
 * 检查Banner场景是否满足展示条件
 * @param sceneName 场景名称
 * @param currentLevel 当前关卡数
 * @param lastShowTime 上次展示时间戳
 * @return 是否满足展示条件
 */
- (BOOL)canShowBannerScene:(NSString *)sceneName 
              currentLevel:(NSInteger)currentLevel 
              lastShowTime:(NSTimeInterval)lastShowTime;

/**
 * 获取Banner场景的等待时间
 * @param sceneName 场景名称
 * @return 等待时间（秒），-1表示无限制
 */
- (NSInteger)getBannerWaitTimeForScene:(NSString *)sceneName;

/**
 * 获取Banner场景的展示位置
 * @param sceneName 场景名称
 * @return 展示位置（bottom、top、bottom_top）
 */
- (nullable NSString *)getBannerPositionForScene:(NSString *)sceneName;

/**
 * 获取Banner场景是否启用短屏展示
 * @param sceneName 场景名称
 * @return 是否启用短屏展示
 */
- (BOOL)isBannerShortShowEnabledForScene:(NSString *)sceneName;

/**
 * 获取Banner场景的每日展示限制
 * @param sceneName 场景名称
 * @return 每日展示限制次数，-1表示无限制
 */
- (NSInteger)getBannerDailyLimitForScene:(NSString *)sceneName;

/**
 * 检查是否为AdMob优先场景
 * @param sceneName 场景名称
 * @return 是否AdMob优先
 */
- (BOOL)isAdMobFirstForScene:(NSString *)sceneName;

/**
 * 清除所有策略缓存
 */
- (void)clearAllStrategies;

/**
 * 从广告策略接口获取并解析Banner策略数据
 * @param completion 完成回调 (success, error)
 */
- (void)fetchAndParseBannerStrategyWithCompletion:(void(^)(BOOL success, NSError * _Nullable error))completion;

@end

NS_ASSUME_NONNULL_END